#include "folder.h"

Folder::Folder(char* nomRep) {
	/* exemple de nomRep : "/usr/lib/blabla/"	*/
	name = nomRep;
	size = 0;
	fileCount = 0;
	repCount = 0;
	objCount = 0;
	files = new vector<File*>;
	subfolders = new vector<Folder*>;
	rep = opendir(name); // ouverture du repertoire
	while ((element = readdir(rep))) // tant qu'il y a des elts dans le rep
	{
		// si les elts courants ne sont ni . ni ..
		if (strcmp(element->d_name,".") && strcmp(element->d_name,".."))
		{
			if (element->d_type == DT_REG) // si elt courant : fichier
			{
				// on concatene le chemin et le nom du fichier
				char *temp = new char[256];
				sprintf(temp,"%s%s",name,element->d_name);
				// on rajoute un objet de type File correspondant
				File::File *fic = new File(temp);	
				(*files).push_back(fic);
				// on met à jour la taille du dossier 
				size = size + fic->getSize();
				// et le nombre de fichiers total			
				fileCount++;
			}
			else if (element->d_type == DT_DIR) // si elt courant : repertoire
			{
				// on concatene le chemin et le nom du repertoire	
				char *temp = new char[256];
				sprintf(temp,"%s%s/",name,element->d_name);
				// on rajoute un objet de type Folder correspondant
				Folder::Folder *fold = new Folder(temp);
				(*subfolders).push_back(fold);
				// on rajoute la taille POSIX d'un dossier
				size = size + 4096;
				// et on incrémente le nombre de sous-répertoires
				repCount++;
			}
			// nombre d'objets : utilisé à des fins d'affichage
			objCount++;
		}
	}
	// printf("\nnb de fichiers sur %s : %d\n",nomRep,fileCount);	
	// printf("nb de rep sur %s : %d\n",nomRep,repCount);	
	// printf("nb d'objets sur %s : %d\n\n",nomRep,objCount);
	closedir(rep);	
	// cout << "first fic " << (*((*files)[0])).name << endl;	
	// if ((*subfolders).size() > 0)	
	//	cout << "first rep " << (*((*subfolders)[0])).name << endl;	
	/* lire les dates de création et modif depuis le
	repertoire ext3 : plus tard */
}

char* Folder::getNom() {
	return name;
}

vector<File*> Folder::getFiles() {
	return *files;
}

vector<Folder*> Folder::getSubfolders() {
	return *subfolders;
}

Folder::~Folder() {
	for (size_t i=0; i<files->size(); i++)
		if (&(files[i]) != NULL)
			delete &(files[i]);
	for (size_t i=0; i<subfolders->size(); i++)
		if (&(subfolders[i]) != NULL)
			delete &(subfolders[i]);
}

